package com.bm.common;

import com.bm.util.FileUtil;
import com.bm.util.JdbcUtil;

import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

/***
 * 学生数据工具
 */
public class StudentCommon {

    /**
     * 清洗数据
     */
    public void cleanFile() {
        System.out.println("--开始学生数据清洗--");
        File dirFile = new File("D:\\项目一数据\\数据\\脏数据\\学生表");//获取目录地址
        File[] studentFiles = dirFile.listFiles();//获取地址下的所有文件
        for (File file :
                studentFiles) {
            String filePath = file.getPath();//获取每个文件的地址
            System.out.println(filePath);
            cleanFile(filePath);//清洗一个文件
        }
    }

    /**
     *清洗数据，一个文件
     *@param filePath
     */
    public void cleanFile(String filePath){
        ArrayList<String[]> list = FileUtil.CSV2ArrayStudent(filePath);
        for (String[] line:list) {
            for (String word:line) {
                System.out.print(word+"\t");
            }
            System.out.println();//一行结束后换行
        }
        System.out.println(list.size());//结果集合的长度
    }

    /**
     *写入数据库
     */
    public void witeDB(String s){
        System.out.println("--开始学生数据写入--");
        File dirFile = new File("D:\\项目一数据\\数据\\脏数据\\学生表");//获取目标地址
        File[] studebtFiles = dirFile.listFiles();//获取地址下的所有文件
        for (File file:
                studebtFiles){
            String filePath = file.getPath();//获取每个文件的地址
            System.out.println(filePath);
            writDB(filePath);//写入数据库一个文件
        }
    }

    /**
     * 写入数据库，一个文件
     * @param filePath 文件地址
     */
    public void writDB(String filePath) {
        Connection conn = null;//申明数据库连接对象
        Statement stmt = null;//申明数据库执行工具
        int row = 0;//数据库受影响行数

        StringBuilder sql = new StringBuilder();//申明SQL拼接工具
        sql.append("INSERT INTO `t_student` VALUES");//INSERT语句的开头

        //读取清洗后的CSV文件，拼接成SQL批量插入语句
        ArrayList<String[]> list = FileUtil.CSV2ArrayStudent(filePath);//读取处理后的学生数据
        for (String[] line : list) {//循环每一行数据
            sql.append("(NULL,");//一行的开始
            for (String word : line) {//循环每一行中的每个字段数据
                if (word.length() == 0) {
                    sql.append("null").append(",");//拼接每个字段
                } else {
                    sql.append("'").append(word).append("'").append(",");//拼接每个字段
                }
            }//一行中的每个字段，循环结束
            sql.deleteCharAt(sql.length() - 1);//去掉最后一个字符，多余的逗号
            sql.append("),");//一行的结束
        }
        sql.deleteCharAt(sql.length() - 1);//去掉最后一个字符，多余的逗号
        try {
            conn = JdbcUtil.getConnection();//获取数据库连接对象
            stmt = conn.createStatement();//获取执行SQL的工具
            row = stmt.executeUpdate(sql.toString());//执行拼接的SQL
            System.out.println("受影响行数" + row);//打印受影响行数（插入多少条数据）
        } catch (
                SQLException e) {
            throw new RuntimeException(e);
        } finally {
            JdbcUtil.release(conn, stmt);//回收资源
        }
    }
}
